/* * IronJacamar, a Java EE Connector Architecture implementation * Copyright 2014, Red Hat Inc, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the Eclipse Public License 1.0 as * published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Eclipse * Public License for more details. * * You should have received a copy of the Eclipse Public License * along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.ironjacamar.common.metadata.ds; import org.ironjacamar.common.api.metadata.common.Capacity; import org.ironjacamar.common.api.metadata.common.Extension; import org.ironjacamar.common.api.metadata.common.FlushStrategy; import org.ironjacamar.common.api.metadata.common.Recovery; import org.ironjacamar.common.api.metadata.ds.Credential; import org.ironjacamar.common.api.metadata.ds.DataSource; import org.ironjacamar.common.api.metadata.ds.DataSources; import org.ironjacamar.common.api.metadata.ds.Driver; import org.ironjacamar.common.api.metadata.ds.DsPool; import org.ironjacamar.common.api.metadata.ds.DsSecurity; import org.ironjacamar.common.api.metadata.ds.DsXaPool; import org.ironjacamar.common.api.metadata.ds.Statement; import org.ironjacamar.common.api.metadata.ds.Statement.TrackStatementsEnum; import org.ironjacamar.common.api.metadata.ds.Timeout; import org.ironjacamar.common.api.metadata.ds.TransactionIsolation; import org.ironjacamar.common.api.metadata.ds.Validation; import org.ironjacamar.common.api.metadata.ds.XaDataSource; import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; import java.util.List; import java.util.Map; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamWriter; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; /** * DataSources 2.0 tests * @author <a href="mailto:jesper.pedersen@ironjacamar.org">Jesper Pedersen</a> */ public class DataSources20TestCase { /** * Read * @throws Exception In case of an error */ @Test public void testRead() throws Exception { DsParser parser = new DsParser(); InputStream is = DataSources20TestCase.class.getClassLoader(). getResourceAsStream("../../resources/test/ds/dashds-2.0.xml"); assertNotNull(is); XMLStreamReader xsr = XMLInputFactory.newInstance().createXMLStreamReader(is); DataSources ds = parser.parse(xsr); assertNotNull(ds); is.close(); checkDS(ds); } /** * ToString * @throws Exception In case of an error */ @Test public void testToString() throws Exception { DsParser parser = new DsParser(); InputStream is = DataSources20TestCase.class.getClassLoader(). getResourceAsStream("../../resources/test/ds/dashds-2.0.xml"); assertNotNull(is); XMLStreamReader xsr = XMLInputFactory.newInstance().createXMLStreamReader(is); DataSources ds = parser.parse(xsr); assertNotNull(ds); is.close(); StringReader sr = new StringReader(ds.toString()); XMLStreamReader nxsr = XMLInputFactory.newInstance().createXMLStreamReader(sr); DataSources dsn = parser.parse(nxsr); checkDS(dsn); assertEquals(ds, dsn); } /** * Write * @throws Exception In case of an error */ @Test public void testWrite() throws Exception { DsParser parser = new DsParser(); InputStream is = DataSources20TestCase.class.getClassLoader(). getResourceAsStream("../../resources/test/ds/dashds-2.0.xml"); assertNotNull(is); XMLStreamReader xsr = XMLInputFactory.newInstance().createXMLStreamReader(is); DataSources ds = parser.parse(xsr); assertNotNull(ds); is.close(); StringWriter sw = new StringWriter(); XMLStreamWriter xsw = XMLOutputFactory.newInstance().createXMLStreamWriter(sw); xsw.setDefaultNamespace(""); xsw.writeStartDocument("UTF-8", "1.0"); parser.store(ds, xsw); xsw.writeEndDocument(); xsw.flush(); xsw.close(); assertEquals(ds.toString(), sw.toString()); } /** * Equal * @throws Exception In case of an error */ @Test public void testEqual() throws Exception { DsParser parser = new DsParser(); InputStream is1 = DataSources20TestCase.class.getClassLoader(). getResourceAsStream("../../resources/test/ds/dashds-2.0.xml"); assertNotNull(is1); XMLStreamReader xsr1 = XMLInputFactory.newInstance().createXMLStreamReader(is1); DataSources ds1 = parser.parse(xsr1); assertNotNull(ds1); is1.close(); InputStream is2 = DataSources20TestCase.class.getClassLoader(). getResourceAsStream("../../resources/test/ds/dashds-2.0.xml"); assertNotNull(is2); XMLStreamReader xsr2 = XMLInputFactory.newInstance().createXMLStreamReader(is2); DataSources ds2 = parser.parse(xsr2); assertNotNull(ds2); is2.close(); assertEquals(ds1, ds2); } /** * Checks the data source parsed * @param result of data source parsing */ private void checkDS(DataSources ds) { List<DataSource> listDs = ds.getDataSource(); assertEquals(1, listDs.size()); DataSource d = listDs.get(0); assertFalse(d.isJTA()); assertTrue(d.isSpy()); assertFalse(d.isEnabled()); assertFalse(d.isUseCcm()); assertTrue(d.isConnectable()); assertFalse(d.isTracking()); assertEquals("java:jboss/datasources/complexDs", d.getJndiName()); assertEquals("complexDs_Pool", d.getId()); assertEquals("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", d.getConnectionUrl()); assertEquals("org.hsqldb.jdbcDriver", d.getDriverClass()); assertEquals("org.pg.JdbcDataSource", d.getDataSourceClass()); assertEquals("h2", d.getDriver()); Map<String, String> properties = d.getConnectionProperties(); assertEquals(2, properties.size()); assertEquals("Property1", properties.get("name1")); assertEquals("Property2", properties.get("name2")); assertEquals("select 1", d.getNewConnectionSql()); assertEquals(":", d.getUrlDelimiter()); assertEquals("someClass", d.getUrlSelectorStrategyClassName()); assertEquals(TransactionIsolation.valueOf("2"), d.getTransactionIsolation()); DsPool pool = d.getPool(); assertNotNull(pool); assertEquals(1, (int)pool.getMinPoolSize()); assertEquals(2, (int)pool.getInitialPoolSize()); assertEquals(5, (int)pool.getMaxPoolSize()); assertTrue(pool.isPrefill()); assertEquals(FlushStrategy.ALL_CONNECTIONS, pool.getFlushStrategy()); Capacity cp = pool.getCapacity(); assertNotNull(cp); Extension e = cp.getIncrementer(); properties = e.getConfigPropertiesMap(); assertEquals(2, properties.size()); assertEquals("Property1", properties.get("name1")); assertEquals("Property2", properties.get("name2")); assertEquals("ic", e.getClassName()); e = cp.getDecrementer(); properties = e.getConfigPropertiesMap(); assertEquals(2, properties.size()); assertEquals("Property1", properties.get("name1")); assertEquals("Property2", properties.get("name2")); assertEquals("dc", e.getClassName()); DsSecurity s = d.getSecurity(); assertNotNull(s); assertEquals("sa", s.getUserName()); assertEquals("sa", s.getPassword()); e = s.getReauthPlugin(); properties = e.getConfigPropertiesMap(); assertEquals(2, properties.size()); assertEquals("Property1", properties.get("name1")); assertEquals("Property2", properties.get("name2")); assertEquals("someClass1", e.getClassName()); Validation v = d.getValidation(); assertNotNull(v); assertEquals("select 1", v.getCheckValidConnectionSql()); assertTrue(v.isBackgroundValidation()); assertTrue(v.isValidateOnMatch()); assertTrue(v.isUseFastFail()); assertEquals(2000L, (long)v.getBackgroundValidationMillis()); e = v.getValidConnectionChecker(); properties = e.getConfigPropertiesMap(); assertEquals(2, properties.size()); assertEquals("Property1", properties.get("name1")); assertEquals("Property2", properties.get("name2")); assertEquals("someClass2", e.getClassName()); e = v.getStaleConnectionChecker(); properties = e.getConfigPropertiesMap(); assertEquals(2, properties.size()); assertEquals("Property1", properties.get("name1")); assertEquals("Property2", properties.get("name2")); assertEquals("someClass3", e.getClassName()); e = v.getExceptionSorter(); properties = e.getConfigPropertiesMap(); assertEquals(2, properties.size()); assertEquals("Property1", properties.get("name1")); assertEquals("Property2", properties.get("name2")); assertEquals("someClass4", e.getClassName()); Timeout t = d.getTimeout(); assertNotNull(t); assertEquals(20000L, (long)t.getBlockingTimeoutMillis()); assertEquals(4, (int)t.getIdleTimeoutMinutes()); assertEquals(120L, (long)t.getQueryTimeout()); assertEquals(100L, (long)t.getUseTryLock()); assertEquals(2L, (long)t.getAllocationRetry()); assertEquals(3000L, (long)t.getAllocationRetryWaitMillis()); assertTrue(t.isSetTxQueryTimeout()); Statement st = d.getStatement(); assertNotNull(st); assertEquals(30L, (long)st.getPreparedStatementsCacheSize()); assertTrue(st.isSharePreparedStatements()); assertEquals(TrackStatementsEnum.NOWARN, st.getTrackStatements()); List<XaDataSource> xds = ds.getXaDataSource(); assertEquals(1, xds.size()); XaDataSource xd = xds.get(0); assertFalse(xd.isSpy()); assertTrue(xd.isEnabled()); assertTrue(xd.isUseCcm()); assertFalse(xd.isConnectable()); assertTrue(xd.isTracking()); assertEquals("java:jboss/xa-datasources/complexXaDs", xd.getJndiName()); assertEquals("complexXaDs_Pool", xd.getId()); assertEquals("org.pg.JdbcXADataSource", xd.getXaDataSourceClass()); assertEquals("pg", xd.getDriver()); properties = xd.getXaDataSourceProperty(); assertEquals(2, properties.size()); assertEquals("Property1", properties.get("name1")); assertEquals("Property2", properties.get("name2")); assertEquals("select 1", xd.getNewConnectionSql()); assertEquals(":", xd.getUrlDelimiter()); assertEquals("someClass", xd.getUrlSelectorStrategyClassName()); assertEquals(TransactionIsolation.TRANSACTION_READ_COMMITTED, xd.getTransactionIsolation()); DsXaPool xpool = xd.getXaPool(); assertNotNull(xpool); assertEquals(1, (int)xpool.getMinPoolSize()); assertEquals(2, (int)xpool.getInitialPoolSize()); assertEquals(5, (int)xpool.getMaxPoolSize()); assertTrue(xpool.isPrefill()); assertEquals(FlushStrategy.GRACEFULLY, xpool.getFlushStrategy()); assertTrue(xpool.isIsSameRmOverride()); assertTrue(xpool.isPadXid()); assertFalse(xpool.isWrapXaResource()); cp = xpool.getCapacity(); assertNotNull(cp); e = cp.getIncrementer(); properties = e.getConfigPropertiesMap(); assertEquals(2, properties.size()); assertEquals("Property1", properties.get("name1")); assertEquals("Property2", properties.get("name2")); assertEquals("ic", e.getClassName()); e = cp.getDecrementer(); properties = e.getConfigPropertiesMap(); assertEquals(2, properties.size()); assertEquals("Property1", properties.get("name1")); assertEquals("Property2", properties.get("name2")); assertEquals("dc", e.getClassName()); s = xd.getSecurity(); assertNotNull(s); assertEquals("HsqlDbRealm", s.getSecurityDomain()); e = s.getReauthPlugin(); properties = e.getConfigPropertiesMap(); assertEquals(2, properties.size()); assertEquals("Property1", properties.get("name1")); assertEquals("Property2", properties.get("name2")); assertEquals("someClass1", e.getClassName()); Recovery r = xd.getRecovery(); assertNotNull(r); assertFalse(r.isNoRecovery()); Credential c = (Credential)r.getCredential(); assertNotNull(c); assertEquals("RecoveryUser", c.getUserName()); assertEquals("RecoveryPassword", c.getPassword()); assertNull(c.getSecurityDomain()); e = r.getPlugin(); properties = e.getConfigPropertiesMap(); assertEquals(2, properties.size()); assertEquals("Property1", properties.get("name1")); assertEquals("Property2", properties.get("name2")); assertEquals("someClass5", e.getClassName()); assertEquals("some-module-name", e.getModuleName()); assertEquals("some-module-slot", e.getModuleSlot()); v = xd.getValidation(); assertNotNull(v); assertEquals("select 1", v.getCheckValidConnectionSql()); assertTrue(v.isBackgroundValidation()); assertTrue(v.isValidateOnMatch()); assertTrue(v.isUseFastFail()); assertEquals(2000L, (long)v.getBackgroundValidationMillis()); e = v.getValidConnectionChecker(); properties = e.getConfigPropertiesMap(); assertEquals(2, properties.size()); assertEquals("Property1", properties.get("name1")); assertEquals("Property2", properties.get("name2")); assertEquals("someClass2", e.getClassName()); e = v.getStaleConnectionChecker(); properties = e.getConfigPropertiesMap(); assertEquals(2, properties.size()); assertEquals("Property1", properties.get("name1")); assertEquals("Property2", properties.get("name2")); assertEquals("someClass3", e.getClassName()); e = v.getExceptionSorter(); properties = e.getConfigPropertiesMap(); assertEquals(2, properties.size()); assertEquals("Property1", properties.get("name1")); assertEquals("Property2", properties.get("name2")); assertEquals("someClass4", e.getClassName()); t = xd.getTimeout(); assertNotNull(t); assertEquals(20000L, (long)t.getBlockingTimeoutMillis()); assertEquals(4, (int)t.getIdleTimeoutMinutes()); assertEquals(120L, (long)t.getQueryTimeout()); assertEquals(100L, (long)t.getUseTryLock()); assertEquals(2L, (long)t.getAllocationRetry()); assertEquals(3000L, (long)t.getAllocationRetryWaitMillis()); assertTrue(t.isSetTxQueryTimeout()); st = xd.getStatement(); assertNotNull(st); assertEquals(30L, (long)st.getPreparedStatementsCacheSize()); assertTrue(st.isSharePreparedStatements()); assertEquals(TrackStatementsEnum.TRUE, st.getTrackStatements()); List<Driver> drivers = ds.getDrivers(); assertEquals(2, drivers.size()); Driver driver = ds.getDriver("h2"); assertTrue(drivers.contains(driver)); assertNotNull(driver); assertEquals("h2", driver.getName()); assertEquals(null, driver.getMajorVersion()); assertEquals(null, driver.getMinorVersion()); assertEquals("com.h2database.h2", driver.getModule()); assertEquals(null, driver.getDriverClass()); assertEquals(null, driver.getXaDataSourceClass()); assertEquals("org.h2.jdbcx.JdbcDataSource", driver.getDataSourceClass()); driver = ds.getDriver("pg"); assertNotNull(driver); assertTrue(drivers.contains(driver)); assertEquals(9, (int)driver.getMajorVersion()); assertEquals(1, (int)driver.getMinorVersion()); assertEquals("org.pg.postgres", driver.getModule()); assertEquals("org.pg.Driver", driver.getDriverClass()); assertEquals("org.pg.JdbcDataSource", driver.getXaDataSourceClass()); assertEquals(null, driver.getDataSourceClass()); } }